// worker1 ---基本使用
// worker中没有window对象，但是可以使用self对象
// self对象和window对象类似，可以调用self对象的属性和方法
// 例如，可以使用self.postMessage()方法向主线程发送消息
// 可以使用self.onmessage()方法监听主线程发送的消息
// 可以使用self.onerror()方法监听错误
// document对象也没有，location,和navigator对象只读

/**
 * 在 worker 线程内部关闭 worker，不会直接断开与主线程的连接，而是等 worker 线程当前的 Event Loop 所有任务执行完，再关闭。
 * 也就是说，在当前 Event Loop 中继续调用 postMessage() 方法，
 * 主线程还是能通过监听message事件收到消息的。
 */
self.onmessage = function (event) {

  self.close(); // 关闭连接

  setTimeout( ()=> {
    // 主线程不会接受，因为在下一次循环了
    self.postMessage('setTimeout from worker!');
  }, 1000);

  Promise.resolve().then(() => {
    // 向主线程发送消息
    self.postMessage('Promise from worker!');
  });
  
  // 向主线程发送消息
  self.postMessage('Hello from worker!');

};



